﻿using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;

namespace _101_多年Task同时操作ConcurrentBag集合_集合
{
    class Program
    {
        static void Main(string[] args)
        {
            ConcurrentBag<int> bag = new ConcurrentBag<int>();

            //启动第一个Task，向集合中添加元素
            Task t1 = Task.Run(() =>
            {
                for (int k = 0; k < 51; k++)
                {
                    Console.WriteLine("即将添加元素：{0}", k);
                    bag.Add(k);
                }
            });

            //启动第二个Task，从集合中取出元素，此Task在第一个Task执行后执行。
            Task t2 = t1.ContinueWith((task) =>
            {
                while (!bag.IsEmpty)
                {
                    if (bag.TryTake(out int item))
                    {
                        Console.WriteLine("已取出元素：{0}", item);
                    }
                }
            });

            //调用watiall方法，让当前线程暂停执行，等上面两个Task执行完成再继续
            Task.WaitAll(t1, t2);
        }
    }
}
